home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / pyshared / PIL / MpegImagePlugin.py < prev    next >
Text File  |  2006-12-03  |  2KB  |  84 lines

  1. #
  2. # The Python Imaging Library.
  3. # $Id: MpegImagePlugin.py 2134 2004-10-06 08:55:20Z fredrik $
  4. #
  5. # MPEG file handling
  6. #
  7. # History:
  8. #       95-09-09 fl     Created
  9. #
  10. # Copyright (c) Secret Labs AB 1997.
  11. # Copyright (c) Fredrik Lundh 1995.
  12. #
  13. # See the README file for information on usage and redistribution.
  14. #
  15.  
  16. __version__ = "0.1"
  17.  
  18. import array, string
  19. import Image, ImageFile
  20.  
  21. #
  22. # Bitstream parser
  23.  
  24. class BitStream:
  25.  
  26.     def __init__(self, fp):
  27.         self.fp = fp
  28.         self.bits = 0
  29.         self.bitbuffer = 0
  30.  
  31.     def next(self):
  32.         return ord(self.fp.read(1))
  33.  
  34.     def peek(self, bits):
  35.         while self.bits < bits:
  36.             c = self.next()
  37.             if c < 0:
  38.                 self.bits = 0
  39.                 continue
  40.             self.bitbuffer = (self.bitbuffer << 8) + c
  41.             self.bits = self.bits + 8
  42.         return self.bitbuffer >> (self.bits - bits) & (1L << bits) - 1
  43.  
  44.     def skip(self, bits):
  45.         while self.bits < bits:
  46.             self.bitbuffer = (self.bitbuffer << 8) + ord(self.fp.read(1))
  47.             self.bits = self.bits + 8
  48.         self.bits = self.bits - bits
  49.  
  50.     def read(self, bits):
  51.         v = self.peek(bits)
  52.         self.bits = self.bits - bits
  53.         return v
  54.  
  55. ##
  56. # Image plugin for MPEG streams.  This plugin can identify a stream,
  57. # but it cannot read it.
  58.  
  59. class MpegImageFile(ImageFile.ImageFile):
  60.  
  61.     format = "MPEG"
  62.     format_description = "MPEG"
  63.  
  64.     def _open(self):
  65.  
  66.         s = BitStream(self.fp)
  67.  
  68.         if s.read(32) != 0x1B3:
  69.             raise SyntaxError, "not an MPEG file"
  70.  
  71.         self.mode = "RGB"
  72.         self.size = s.read(12), s.read(12)
  73.  
  74.  
  75. # --------------------------------------------------------------------
  76. # Registry stuff
  77.  
  78. Image.register_open("MPEG", MpegImageFile)
  79.  
  80. Image.register_extension("MPEG", ".mpg")
  81. Image.register_extension("MPEG", ".mpeg")
  82.  
  83. Image.register_mime("MPEG", "video/mpeg")
  84.